फ्लेक्सबॉक्सच्या मूलभूत गोष्टींच्या पलीकडे जा. align-content, flex-grow, flex-shrink आणि वास्तविक लेआउट उदाहरणांसह प्रगत अलाइनमेंट आणि डिस्ट्रिब्युशनमध्ये प्राविण्य मिळवा.
CSS फ्लेक्सबॉक्समध्ये प्राविण्य: प्रगत अलाइनमेंट आणि डिस्ट्रिब्युशन
गेल्या काही वर्षांपासून, CSS फ्लेक्सबॉक्स आधुनिक वेब लेआउटचा आधारस्तंभ आहे. बहुतेक डेव्हलपर्स display: flex वापरून आयटम्सना एका ओळीत संरेखित करण्यासाठी किंवा साधे केंद्र-स्थित घटक तयार करण्यासाठी सोयीस्कर आहेत. तथापि, फ्लेक्सबॉक्समध्ये खरे प्राविण्य मिळवणे म्हणजे प्रगत अलाइनमेंट आणि डायनॅमिक डिस्ट्रिब्युशनसाठी त्याच्या अधिक सूक्ष्म प्रॉपर्टीज समजून घेणे. जेव्हा तुम्ही justify-content: center आणि align-items: center च्या मूलभूत गोष्टींच्या पलीकडे जाता, तेव्हा तुम्ही आश्चर्यकारक सहजतेने जटिल, प्रतिसाद देणारे आणि स्वाभाविकपणे लवचिक लेआउट्स तयार करण्याची शक्ती अनलॉक करता.
हा मार्गदर्शक अशा डेव्हलपर्ससाठी आहे ज्यांना मूलभूत गोष्टी माहित आहेत परंतु त्यांना त्यांची समज अधिक वाढवायची आहे. आम्ही मल्टी-लाइन अलाइनमेंट नियंत्रित करणाऱ्या प्रॉपर्टीज, फ्लेक्स आयटम्स कसे वाढतात आणि कमी होतात यामागील अत्याधुनिक तर्क आणि सामान्य लेआउट आव्हाने सोडवणारे अनेक शक्तिशाली पॅटर्न्स शोधू. एका सामान्य वापरकर्त्यापासून आत्मविश्वासू फ्लेक्सबॉक्स आर्किटेक्ट बनण्यासाठी तयार व्हा.
पायाभूत माहिती: मुख्य (Main) आणि क्रॉस (Cross) ॲक्सिसची एक जलद उजळणी
प्रगत विषयांमध्ये जाण्यापूर्वी, प्रत्येक फ्लेक्स कंटेनरवर नियंत्रण ठेवणाऱ्या दोन ॲक्सिसची (अक्ष) पक्की समज असणे महत्त्वाचे आहे. फ्लेक्सबॉक्समधील सर्व अलाइनमेंट आणि डिस्ट्रिब्युशन प्रॉपर्टीज या दोन ॲक्सिसपैकी एकावर कार्य करतात.
- मुख्य ॲक्सिस (Main Axis): हा प्राथमिक ॲक्सिस आहे ज्यावर फ्लेक्स आयटम्स मांडले जातात. त्याची दिशा
flex-directionप्रॉपर्टीद्वारे परिभाषित केली जाते. - क्रॉस ॲक्सिस (Cross Axis): हा ॲक्सिस नेहमी मुख्य ॲक्सिसला लंब असतो.
मुख्य गोष्ट ही आहे की हे ॲक्सिस स्थिर नसतात. ते तुमच्या flex-direction व्हॅल्यूनुसार स्वतःची दिशा बदलतात:
flex-direction: row(डीफॉल्ट): मुख्य ॲक्सिस आडवा (डावीकडून-उजवीकडे) असतो, आणि क्रॉस ॲक्सिस उभा (वरून-खाली) असतो.flex-direction: column: मुख्य ॲक्सिस उभा (वरून-खाली) होतो, आणि क्रॉस ॲक्सिस आडवा (डावीकडून-उजवीकडे) होतो.flex-direction: row-reverse: मुख्य ॲक्सिस आडवा असतो परंतु उजवीकडून-डावीकडे जातो.flex-direction: column-reverse: मुख्य ॲक्सिस उभा असतो परंतु खालून-वर जातो.
ही मूलभूत संकल्पना विसरणे हेच फ्लेक्सबॉक्समधील बहुतेक गोंधळाचे मूळ आहे. कोणतीही अलाइनमेंट प्रॉपर्टी लागू करण्यापूर्वी नेहमी स्वतःला विचारा: "माझा मुख्य ॲक्सिस कोणत्या दिशेला आहे?"
justify-content सह मुख्य ॲक्सिसवरील डिस्ट्रिब्युशनमध्ये प्राविण्य
justify-content प्रॉपर्टी मुख्य ॲक्सिसवर फ्लेक्स आयटम्सच्या मध्ये आणि आजूबाजूला जागा कशी वितरीत करायची हे नियंत्रित करते. flex-start, flex-end, आणि center हे सोपे असले तरी, खरी शक्ती स्पेस-डिस्ट्रिब्युशन व्हॅल्यूजमध्ये आहे.
जागेच्या वितरणावर एक सखोल नजर
चला space-between, space-around, आणि space-evenly मधील सूक्ष्म परंतु महत्त्वपूर्ण फरक स्पष्ट करूया.
-
justify-content: space-between;ही व्हॅल्यू आयटम्सना मुख्य ॲक्सिसवर समान रीतीने वितरीत करते. पहिला आयटम कंटेनरच्या अगदी सुरुवातीला आणि शेवटचा आयटम अगदी शेवटी ढकलला जातो. उर्वरित सर्व जागा आयटम्सच्या मध्ये समान विभागली जाते. बाहेरील कडांवर जागा नसते.
वापराचे उदाहरण: नेव्हिगेशन बारसाठी योग्य, जिथे तुम्हाला लोगो डाव्या बाजूला आणि लिंक्स उजव्या बाजूला हव्या असतात, आणि लिंक्समध्ये समान अंतर असते.
-
justify-content: space-around;ही व्हॅल्यू प्रत्येक आयटमच्या सभोवताली समान जागेसह आयटम्स वितरीत करते. प्रत्येक आयटमच्या डाव्या आणि उजव्या दोन्ही बाजूंना जागेचा एक "बबल" आहे असे समजा. जेव्हा जवळच्या आयटम्सचे बबल्स मिळतात, तेव्हा त्यांच्यामधील जागा कंटेनरच्या कडांवरील जागेच्या दुप्पट दिसते. विशेषतः, बाहेरील कडांवरील जागा आयटम्समधील जागेच्या अर्धी असते.
वापराचे उदाहरण: कार्ड लेआउट्स किंवा गॅलरीसाठी उपयुक्त, जिथे तुम्हाला आयटम्सना कंटेनरच्या कडांपासून थोडे अंतर हवे असते, परंतु त्यांच्या अगदी जवळ नको असते.
-
justify-content: space-evenly;या तिघांपैकी ही सर्वात सोपी आहे. हे सुनिश्चित करते की कोणत्याही दोन आयटम्समधील जागा पहिल्या/शेवटच्या आयटम आणि कंटेनरच्या कडेमधील जागेइतकीच आहे. प्रत्येक गॅप समान असतो.
वापराचे उदाहरण: जेव्हा तुम्हाला पूर्णपणे संतुलित, सममितीय लेआउटची आवश्यकता असते तेव्हा आदर्श. जेव्हा डिझाइनर "समान अंतर" मागतात तेव्हा त्यांना अनेकदा हेच अपेक्षित असते.
align-items आणि align-self सह क्रॉस ॲक्सिस अलाइनमेंटवर विजय
justify-content मुख्य ॲक्सिस हाताळते, तर align-items एकाच ओळीत क्रॉस ॲक्सिसवर आयटम्सची डीफॉल्ट अलाइनमेंट व्यवस्थापित करते.
align-items व्हॅल्यूज समजून घेणे
align-items: stretch;(डीफॉल्ट): यामुळेच तुमचे फ्लेक्स आयटम्स अनेकदा तुम्ही न सांगताही त्यांच्या कंटेनरची उंची भरतात. आयटम्स क्रॉस ॲक्सिसवर कंटेनरचा आकार भरण्यासाठी ताणले जातात (उदा.flex-direction: rowकंटेनरमधील उंची).align-items: flex-start;: आयटम्स क्रॉस ॲक्सिसच्या सुरुवातीला पॅक केले जातात.align-items: flex-end;: आयटम्स क्रॉस ॲक्सिसच्या शेवटी पॅक केले जातात.align-items: center;: आयटम्स क्रॉस ॲक्सिसवर मध्यभागी ठेवले जातात.align-items: baseline;: ही एक शक्तिशाली आणि कमी वापरली जाणारी व्हॅल्यू आहे. आयटम्स अशा प्रकारे संरेखित केले जातात की त्यांचे टेक्स्ट बेसलाइन एका रेषेत येतात. जेव्हा तुमच्याकडे वेगवेगळ्या फॉन्ट आकाराचे आयटम्स असतात (उदा. उपशीर्षकाच्या पुढे मुख्य शीर्षक) आणि तुम्हाला ते फक्त त्यांच्या बॉक्सच्या सीमांनुसार नव्हे तर मजकूरानुसार संरेखित करायचे असतात तेव्हा हे खूप उपयुक्त आहे.
align-self सह ओव्हरराइड करणे
जर तुम्हाला एखादा विशिष्ट आयटम इतरांपेक्षा वेगळ्या पद्धतीने वागावा असे वाटत असेल तर? तिथेच align-self कामी येते. हे वैयक्तिक फ्लेक्स आयटमवर लागू केल्यावर, ते फक्त त्या आयटमसाठी कंटेनरच्या align-items प्रॉपर्टीला ओव्हरराइड करते. हे align-items (आणि `auto`, जे ते कंटेनरच्या व्हॅल्यूवर रीसेट करते) सारख्याच सर्व व्हॅल्यूज स्वीकारते.
उदाहरण: कार्ड्सची एक रांग कल्पना करा, सर्व align-items: center सह मध्यभागी आहेत. तुम्ही एका "वैशिष्ट्यपूर्ण" कार्डाला align-self: stretch; लावून इतरांपेक्षा उंच करून वेगळे दाखवू शकता.
एक दुर्लक्षित हिरो: align-content सह प्रगत डिस्ट्रिब्युशन
फ्लेक्सबॉक्समधील ही कदाचित सर्वात गैरसमज असलेली प्रॉपर्टी आहे, आणि यात प्राविण्य मिळवणे हे प्रगत कौशल्याचे लक्षण आहे. align-items सोबत असलेले साम्य हे गोंधळाचे एक सामान्य कारण आहे.
येथे एक महत्त्वाचा नियम आहे: जेव्हा तुमचे फ्लेक्स आयटम्स एकाच ओळीत असतात तेव्हा align-content चा कोणताही परिणाम होत नाही. हे फक्त तेव्हाच कार्य करते जेव्हा तुमच्याकडे मल्टी-लाइन फ्लेक्स कंटेनर असतो (म्हणजे, तुम्ही flex-wrap: wrap; सेट केले आहे आणि आयटम्स प्रत्यक्षात नवीन ओळींवर रॅप झाले आहेत).
याचा असा विचार करा:
align-itemsआयटम्सना त्यांच्या ओळीत संरेखित करते.align-contentओळींनाच कंटेनरमध्ये संरेखित करते. हे आयटम्सच्या रांगांमधील क्रॉस ॲक्सिसमधील जागेचे वितरण नियंत्रित करते.
हे मूलतः justify-content सारखेच काम करते, परंतु क्रॉस ॲक्सिससाठी. याची व्हॅल्यूज जवळजवळ सारखीच आहेत:
align-content: flex-start;(डीफॉल्ट): सर्व ओळी कंटेनरच्या सुरुवातीला पॅक केल्या जातात.align-content: flex-end;: सर्व ओळी शेवटी पॅक केल्या जातात.align-content: center;: सर्व ओळी मध्यभागी पॅक केल्या जातात.align-content: space-between;: पहिली ओळ सुरुवातीला, शेवटची ओळ शेवटी असते आणि जागा ओळींमध्ये समान रीतीने वितरीत केली जाते.align-content: space-around;: प्रत्येक ओळीच्या सभोवताली समान जागा ठेवली जाते.align-content: space-evenly;: प्रत्येक ओळीमधील अंतर समान असते.align-content: stretch;: उर्वरित जागा घेण्यासाठी ओळी ताणल्या जातात.
वापराचे उदाहरण: एका फोटो गॅलरीची कल्पना करा जिथे आयटम्स रॅप होतात. जर कंटेनरची उंची निश्चित असेल, तर कदाचित अतिरिक्त उभी जागा शिल्लक राहील. डीफॉल्टनुसार, ही जागा तळाशी दिसते. align-content: space-between; किंवा align-content: center; वापरून, तुम्ही तुमच्या संपूर्ण फोटो ग्रिडचे उभे वितरण नियंत्रित करू शकता, ज्यामुळे एक अधिक व्यावसायिक दिसणारा लेआउट तयार होतो.
डायनॅमिक साइझिंग आणि डिस्ट्रिब्युशन: flex शॉर्टहँड
स्टॅटिक लेआउट्स दुर्मिळ आहेत. फ्लेक्सबॉक्सची खरी शक्ती डायनॅमिक कंटेंट आणि उपलब्ध जागा हाताळण्याच्या क्षमतेमध्ये आहे. हे तीन प्रॉपर्टीजद्वारे नियंत्रित केले जाते, जे अनेकदा flex शॉर्टहँडद्वारे सेट केले जातात: flex-grow, flex-shrink, आणि flex-basis.
१. flex-basis: सुरुवातीचा बिंदू
कोणतीही वाढ किंवा घट होण्यापूर्वी, फ्लेक्सबॉक्सला प्रत्येक आयटमसाठी सुरुवातीचा आकार आवश्यक असतो. हे काम flex-basis करते. हे मुख्य ॲक्सिसवर एका घटकाचा डीफॉल्ट आकार परिभाषित करते.
- जर विशिष्ट लांबीवर सेट केले असेल (उदा.
200pxकिंवा10rem), तर तो आयटमचा सुरुवातीचा आकार बनतो. - जर
autoवर सेट केले असेल, तर ते आयटमवर `width` किंवा `height` प्रॉपर्टी शोधते. जर कोणतीही नसेल, तर ते आयटमच्या कंटेंटनुसार आकार ठरवते. - जर
0वर सेट केले असेल, तर आयटमला सुरुवातीचा आकार नसतो आणि त्याचा अंतिम आकार पूर्णपणे त्याच्याflex-growप्रमाणावर अवलंबून असतो.
सर्वोत्तम सराव: फ्लेक्स संदर्भात `width` ऐवजी flex-basis वापरणे अनेकदा चांगले असते, कारण ते मुख्य ॲक्सिसच्या संदर्भात आयटमचा आकार अधिक स्पष्टपणे परिभाषित करते.
२. flex-grow: अतिरिक्त जागेचा वापर
जेव्हा फ्लेक्स कंटेनरमध्ये त्याच्या मुख्य ॲक्सिसवर अतिरिक्त जागा असते, तेव्हा flex-grow ठरवते की ती जागा कशी वितरीत केली जाईल. हे एक युनिटलेस प्रमाण आहे.
- डीफॉल्ट व्हॅल्यू
0आहे, याचा अर्थ आयटम्स अतिरिक्त जागा भरण्यासाठी वाढणार नाहीत. - जर सर्व आयटम्समध्ये
flex-grow: 1असेल, तर अतिरिक्त जागा त्यांच्यामध्ये समान रीतीने वितरीत केली जाते. - जर एका आयटममध्ये
flex-grow: 2आणि दुसऱ्यामध्येflex-grow: 1असेल, तर पहिल्या आयटमला दुसऱ्यापेक्षा दुप्पट अतिरिक्त जागा मिळेल.
३. flex-shrink: कमी जागेचे (ओव्हरफ्लो) व्यवस्थापन
हे `flex-grow` च्या विरुद्ध आहे. जेव्हा कंटेनरमध्ये सर्व आयटम्सना त्यांच्या flex-basis नुसार बसण्यासाठी पुरेशी जागा नसते, तेव्हा त्यांना लहान व्हावे लागते. flex-shrink ते किती कमी होतील हे नियंत्रित करते.
- डीफॉल्ट व्हॅल्यू
1आहे, याचा अर्थ सर्व आयटम्स ओव्हरफ्लो टाळण्यासाठी डीफॉल्टनुसार प्रमाणात लहान होतात. - जर तुम्ही एखाद्या आयटमवर
flex-shrink: 0सेट केले, तर तो लहान होणार नाही. तो त्याचाflex-basisआकार कायम ठेवेल, ज्यामुळे कंटेनर ओव्हरफ्लो होऊ शकतो. हे लोगो किंवा बटन्ससारख्या घटकांसाठी उपयुक्त आहे जे कधीही संकुचित होऊ नयेत.
flex शॉर्टहँड: सर्व एकत्र
flex प्रॉपर्टी ही flex-grow, flex-shrink, आणि flex-basis साठी एक शॉर्टहँड आहे, याच क्रमाने.
flex: 0 1 auto;(डीफॉल्ट): आयटम वाढू शकत नाही, कमी होऊ शकतो आणि त्याचा आधार त्याच्या रुंदी/उंची किंवा कंटेंटद्वारे निर्धारित केला जातो.flex: 1;(flex: 1 1 0;साठी शॉर्टहँड): एक खूप सामान्य व्हॅल्यू. आयटम वाढू आणि कमी होऊ शकतो, आणि त्याचा सुरुवातीचा आकार 0 असतो. हे प्रभावीपणे आयटम्सना फक्त त्यांच्या फ्लेक्स-ग्रो प्रमाणानुसार जागा सामायिक करण्यास भाग पाडते.flex: auto;(flex: 1 1 auto;साठी शॉर्टहँड): आयटम वाढू आणि कमी होऊ शकतो, आणि त्याचा आधार त्याच्या कंटेंटद्वारे निर्धारित केला जातो. हे आयटम्सना त्यांच्या कंटेंटनुसार वेगवेगळ्या आकारात ठेवण्याची परवानगी देते, परंतु तरीही लवचिकपणे अतिरिक्त जागा शोषून घेते.flex: none;(flex: 0 0 auto;साठी शॉर्टहँड): आयटम पूर्णपणे अलवचिक आहे. तो वाढू किंवा कमी होऊ शकत नाही.
व्यावहारिक उपयोग आणि प्रगत परिस्थिती
परिस्थिती १: स्टिकी फूटर (होली ग्रेल लेआउट)
वेब डिझाइनमधील एक नेहमीची समस्या: फूटरला पेजच्या तळाशी कसे चिकटवायचे, जेव्हा कंटेंट कमी असेल तेव्हाही, आणि कंटेंट जास्त असेल तेव्हा ते नैसर्गिकरित्या खाली कसे ढकलले जाईल.
.page-container {
display: flex;
flex-direction: column;
min-height: 100vh; /* Viewport Height */
}
.main-content {
flex-grow: 1; /* or flex: 1; */
}
मुख्य पेज कंटेनरला कॉलम-आधारित फ्लेक्सबॉक्स बनवून आणि मुख्य कंटेंट क्षेत्राला flex-grow: 1 सेट करून, आपण त्याला सर्व उपलब्ध उभी जागा व्यापायला सांगतो, ज्यामुळे फूटर व्ह्यूपोर्टच्या तळाशी ढकलला जातो.
परिस्थिती २: गट विभागण्यासाठी ऑटो मार्जिन
तुम्ही एक नेव्हिगेशन बार कसा तयार कराल ज्यात लोगो अगदी डावीकडे आणि लिंक्सचा एक गट अगदी उजवीकडे असेल? justify-content: space-between काम करते जर लोगो एकच फ्लेक्स आयटम असेल, पण जर उजवीकडे अनेक आयटम्स असतील तर?
यावर उपाय म्हणजे फ्लेक्सबॉक्समधील ऑटो मार्जिनची जादू.
.navbar {
display: flex;
}
.logo {
/* No special properties needed */
}
.nav-links {
margin-left: auto;
}
फ्लेक्स कंटेनरमध्ये, ऑटो मार्जिन ज्या दिशेने लागू केले आहे त्या दिशेतील सर्व उपलब्ध जागा हव्यासाने व्यापते. नेव्हिगेशन लिंक्सच्या गटावर margin-left: auto सेट केल्याने, ते लोगो आणि लिंक्समध्ये एक लवचिक, रिकामी जागा तयार करते, ज्यामुळे लिंक्स पूर्णपणे उजवीकडे ढकलल्या जातात.
परिस्थिती ३: मीडिया ऑब्जेक्ट
एक सामान्य UI पॅटर्नमध्ये एका बाजूला एक प्रतिमा किंवा आयकॉन आणि दुसऱ्या बाजूला वर्णनात्मक मजकूर असतो. मजकुराने उर्वरित सर्व जागा घेतली पाहिजे आणि व्यवस्थित रॅप झाली पाहिजे.
.media-object {
display: flex;
align-items: flex-start; /* Aligns image and text to the top */
}
.media-image {
margin-right: 1rem;
flex-shrink: 0; /* Prevents the image from being squished */
}
.media-body {
flex-grow: 1; /* Takes up all remaining horizontal space */
}
येथे, टेक्स्ट कंटेनरवरील flex-grow: 1 हे महत्त्वाचे आहे. हे सुनिश्चित करते की प्रतिमा कितीही रुंद असली तरी, टेक्स्ट बॉडी कंटेनरमधील उर्वरित उपलब्ध रुंदी भरण्यासाठी विस्तारेल.
निष्कर्ष: अलाइनमेंटच्या पलीकडे, हेतुपुरस्सर लेआउटकडे
फ्लेक्सबॉक्समध्ये प्राविण्य मिळवणे म्हणजे फक्त गोष्टी मध्यभागी आणण्यापलीकडे जाणे. हे ॲक्सिसमधील परस्परसंवाद, जागेच्या वितरणाचे तर्क आणि आयटम साइझिंगची लवचिकता समजून घेण्याबद्दल आहे. मल्टी-लाइन लेआउटसाठी align-content, डायनॅमिक साइझिंगसाठी flex शॉर्टहँड, आणि ऑटो मार्जिनसारख्या शक्तिशाली पॅटर्न्सवर पक्की पकड मिळवून, तुम्ही असे लेआउट्स तयार करू शकता जे केवळ दिसायला आकर्षकच नाहीत तर मजबूत, प्रतिसाद देणारे आणि सिमेंटिकली स्वच्छ देखील आहेत.
पुढच्या वेळी जेव्हा तुम्ही एखाद्या जटिल लेआउट आव्हानाला सामोरे जाल, तेव्हा फ्लोट्स किंवा जटिल पोझिशनिंग हॅक्स वापरण्याचा मोह टाळा. त्याऐवजी, स्वतःला विचारा: हे हेतुपुरस्सर जागेच्या वितरणाने सोडवले जाऊ शकते का? उत्तर, बहुतेक वेळा, CSS फ्लेक्सबॉक्सच्या प्रगत क्षमतांमध्ये सापडेल.